Refactor StatusEditor text handling into TextState/TextService and add tests #2399
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
ViewModelresponsibilities by extracting text setup and processing into dedicated helpers.Bindinginstead of directNSMutableAttributedStringmutation.Description
StatusEditor.TextState(Editor/TextState.swift) holdingstatusText,mentionString,urlLengthAdjustments, suggestion range and backup text.StatusEditor.TextService(Editor/TextService.swift) that encapsulates initial text setup, insertion/replacement helpers, andprocessTextlogic (highlights, URL handling, suggestions).StatusEditor.ViewModelto usetextState+textService, addedstatusTextBindingfor the editor view, and replaced large text manipulation functions with small delegating methods likeupdateStatusTextandapplyTextChanges.EditorViewto use the newstatusTextBindingand added aStatusKittest target withTextServiceTeststhat exercise hashtag suggestion, suggestion reset, URL length adjustment, and initial reply mention generation.Testing
StatusKitTests/TextServiceTests.swiftwith unit tests forTextServicebehaviors including suggestion detection and URL length adjustments.StatusKittest target inPackages/StatusKit/Package.swiftso tests are discoverable by the package test runner.xcodebuildorswift test).Codex Task